package com.qire.manhua.view;

import android.content.Context;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.view.View;

import com.qire.manhua.R;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

/**
 * 竖向布局的 RecyclerView 独立出来是为了之后可以更好的在自定义控件上扩展也可以避免一些常规标准设置。
 */
public class VerticalRecyclerView extends RecyclerView {

    /** 横向Item间距不包括收尾两边距离，收尾两边距离应该交给外边距来控制 */
    private int space = 0;

    public VerticalRecyclerView(@NonNull Context context) {
        this(context, null);
    }

    public VerticalRecyclerView(@NonNull Context context, @Nullable AttributeSet attrs) {
        this(context, attrs, R.attr.recyclerViewStyle);
    }

    public VerticalRecyclerView(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        // 设置竖向布局
        setLayoutManager(new LinearLayoutManager(context, VERTICAL, false));
        // 添加子项间距处理
        post(() -> addItemDecoration(new VerticalItemDecoration()));
    }

    /**
     * 设置 item 之间间距，仅作用在两 Item 之间，单边无效，间距为设置值得2倍，即左右
     * @param space
     */
    public void setItemSpace(int space) {
        this.space = space;
    }

    private class VerticalItemDecoration extends ItemDecoration {

        @Override
        public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
            int itemCount = state.getItemCount();
            int currentIndex = parent.getChildAdapterPosition(view);
            if (currentIndex != 0) {
                // 排除第一个项目不设置左间距
                outRect.top = space;
            }
            // 从0开始，不包含最后一个
            if(currentIndex < (itemCount - 1)) {
                // 排除最后一个项目不设置右间距
                outRect.bottom = space;
            }
        }
    }

}
